package org.example.LeetCode;

/**
* 假设有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
 *
 * 给你一个整数数组 flowerbed 表示花坛，由若干 0 和 1 组成，其中 0 表示没种植花，1 表示种植了花。另有一个数 n ，
 * 能否在不打破种植规则的情况下种入 n 朵花？能则返回 true ，不能则返回 false 。
*
    *输入：flowerbed = [1,0,0,0,1], n = 1
     * 输出：true
*
     * 输入：flowerbed = [1,0,0,0,1], n = 2
     * 输出：false
 *
 * 总结 ：  由题可得 我们需要寻找三个连续的0
 *         开头前一个 结尾后一个 都可以看作已经是0
 *         0{0,0}0
 *
 *      最优if
 *      int cnt = 0, m = f.length;
 *         for (int i = 0; i < m; ++i) {
 *             if ((i == 0 || f[i - 1] == 0) && f[i] == 0 && (i == m - 1 || f[i + 1] == 0)) {
 *                 cnt += 1;
 *                 f[i] = 1;
 *             }
 *         }
 *         return cnt >= n;
 *
*
**/
public class leetCode_605 {

    public static void main(String[] args) {
        //boolean b = canPlaceFlowers(new int[]{ 1,0,0,0,1}, 1);
        boolean b = canPlaceFlowers(new int[]{ 1}, 0);
        System.out.println(b);

    }
    public static boolean canPlaceFlowers(int[] flowerbed, int n) {
        if (flowerbed == null || flowerbed.length == 0){
            return false;
        }
        int count = 0;

        for (int i = 0;i < flowerbed.length; i++){
            if (flowerbed[i]==0){
                int prev = (i==0) ? 0 : flowerbed[i-1];
                int next = (i == flowerbed.length - 1) ? 0 : flowerbed[i+1];
                if (prev == 0 && next == 0){
                    count++;
                    flowerbed[i] = 1;
                    i++;//相邻种不了花 跳过
                }
            }
        }
       return count >= n;

    }
}
